package com.zhiyou100.api.io_demo;

import java.io.*;
import java.util.Scanner;

/**
 * 字节流:  操作图片、视频、音频
 * InputStream   输入流     读取   read
 * OutputStream  输出流     写入   write
 *
 */
public class Demo1 {

    public static void main(String[] args) {
        copy();
    }

    /**
     * 将api.md文件内容复制到io.md文件中
     * 读取api.md文件同时将读取的内容写入到目标文件
     */
    public static void copy() {
        String path = "C:\\Users\\xueyin\\Desktop\\总部317\\io.md";
        File targetFile = new File(path);
        String srcPath = "C:\\Users\\xueyin\\Desktop\\总部317\\api.md";
        File srcFile = new File(srcPath);
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            if (!srcFile.exists()) {
                srcFile.createNewFile();
            }
            if (!targetFile.exists()) {
                targetFile.createNewFile();
            }
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(targetFile);
            //读取源文件
            byte[] bytes = new byte[521];
            //通过字节数据读取文件，每次读取521个字节，会自动将读取的内容放入指定字节数组中，返回值表示每次读取的个数，如果为-1，表示读取完毕
            int i = fis.read(bytes);
            while (i != -1) {
                //一边读取数据一边写入数据
                fos.write(bytes, 0, i);
                i = fis.read(bytes);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if (fis != null){
                    fis.close();
                }
                if (fos != null){
                    fos.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }

        }


    }


    /**
     * 通过字节文件输出流将获取到的数据写入文件
     */
    public static void writeFile() {
        String path = "C:\\Users\\xueyin\\Desktop\\总部317\\io.md";
        File file = new File(path);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入保存到文件的数据");
        String s = scanner.next();
        //如果指定的文件不存在，就创建
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //创建字节输出流   向文件中写入数据,默认是将原数据覆盖,如果在文件末尾添加数据，指定append为true
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file, true);
            //调动write方法写入数据
            fos.write(s.getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //最后关闭资源
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 从指定文件中读取数据
     * FileInputStream用于读取文件数据
     * 字节输入流读取数据时，可能会发生乱码，因为是每个中文字符所占的字节数不一样
     */
    public static void readFile() {
        String path = "C:\\Users\\xueyin\\Desktop\\总部317\\io.md";
        File file = new File(path);
        if (file.exists()) {
            //读取内容
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(file);
                //调用read方法默认每次读取一个字节
                //一次读一个，中文会乱码，我们一次读多个,定义一个字节数组，长度为2的倍数
                byte[] bytes = new byte[16];   //800
                int i = fis.read(bytes);
                while (i != -1) {
                    String s = new String(bytes, 0, i);
                    System.out.println(s);
                    i = fis.read(bytes);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {

            }
        } else {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * 创建文件字节输入流(用于读取数据)：
     */
    public static void createIs() {
        String path = "C:\\Users\\xueyin\\Desktop\\总部317\\api.md";
        try {
            FileInputStream fis = new FileInputStream(path);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        File file = new File(path);
        try {
            FileInputStream fis2 = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }


}
